/*
 * Copyright 2010 jun.enomoto<jun.enomoto@gmail.com>
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package foursquare4j;

import foursquare4j.exception.FoursquareException;
import foursquare4j.type.Categories;
import foursquare4j.type.CheckinResult;
import foursquare4j.type.Checkins;
import foursquare4j.type.Friends;
import foursquare4j.type.Requests;
import foursquare4j.type.Response;
import foursquare4j.type.Settings;
import foursquare4j.type.Tip;
import foursquare4j.type.TipsResult;
import foursquare4j.type.User;
import foursquare4j.type.Users;
import foursquare4j.type.Venue;
import foursquare4j.type.Venues;

public interface Foursquare {

	static final String USER_AGENT = System.getProperty("foursquare4j.http.user.agent", "foursquare4j:0.1.3 20100502");

	static final String CALLBACK_URL = "oob";

	static final String REQUEST_TOKEN_URL = "http://foursquare.com/oauth/request_token";

	static final String USER_AUTHORIZATION_URL = "http://foursquare.com/oauth/authorize";

	static final String ACCESS_TOKEN_URL = "http://foursquare.com/oauth/access_token";

	static final String API_BASE_URL = "http://api.foursquare.com/v1";

	static final String API_AUTHEXCHANGE_URL = API_BASE_URL + "/authexchange";

	static final String API_CHECKINS_URL = API_BASE_URL + "/checkins";

	static final String API_CHECKIN_URL = API_BASE_URL + "/checkin";

	static final String API_HISTORY_URL = API_BASE_URL + "/history";

	static final String API_USER_URL = API_BASE_URL + "/user";

	static final String API_FRIENDS_URL = API_BASE_URL + "/friends";

	static final String API_VENUES_URL = API_BASE_URL + "/venues";

	static final String API_VENUE_URL = API_BASE_URL + "/venue";

	static final String API_CATEGORIES_URL = API_BASE_URL + "/categories";

	static final String API_ADDVENUE_URL = API_BASE_URL + "/addvenue";

	static final String API_PROPOSEEDIT_URL = API_BASE_URL + "/proposeedit";

	static final String API_FLAGCLOSED_URL = API_BASE_URL + "/flagclosed";

	static final String API_TIPS_URL = API_BASE_URL + "/tips";

	static final String API_ADDTIP_URL = API_BASE_URL + "/addtip";

	static final String API_TIP_MARKTODO_URL = API_BASE_URL + "/tip/marktodo";

	static final String API_TIP_MARKDONE_URL = API_BASE_URL + "/tip/markdone";

	static final String API_TIP_UNMARK_URL = API_BASE_URL + "/tip/unmark";

	static final String API_FRIEND_REQUESTS_URL = API_BASE_URL + "/friend/requests";

	static final String API_FRIEND_APPROVE_URL = API_BASE_URL + "/friend/approve";

	static final String API_FRIEND_DENY_URL = API_BASE_URL + "/friend/deny";

	static final String API_FRIEND_SENDREQUEST_URL = API_BASE_URL + "/friend/sendrequest";

	static final String API_FINDFRIENDS_BYNAME_URL = API_BASE_URL + "/findfriends/byname";

	static final String API_FINDFRIENDS_BYPHONE_URL = API_BASE_URL + "/findfriends/byphone";

	static final String API_FINDFRIENDS_BYTWITTER_URL = API_BASE_URL + "/findfriends/bytwitter";

	static final String API_SETTINGS_SETPINGS_URL = API_BASE_URL + "/settings/setpings";

	static final String API_TEST_URL = API_BASE_URL + "/test";

	Checkins checkins(String geolat, String geolong) throws FoursquareException;

	CheckinResult checkin(String vid, String venue, String shout, String _private, String twitter, String facebook, String geolat, String geolong) throws FoursquareException;

	Checkins history(String l, String sinceid) throws FoursquareException;

	User user(String uid, String badges, String mayor) throws FoursquareException;

	Friends friends(String uid) throws FoursquareException;

	Venues venues(String geolat, String geolong, String l, String q) throws FoursquareException;

	Venue venue(String vid) throws FoursquareException;

	Categories categories(String categories, String id, String fullpathname, String nodename) throws FoursquareException;

	Venue addVenue(String name, String address, String crossstreet, String city, String state, String zip, String phone, String geolat, String geolong, String primarycategoryid) throws FoursquareException;

	Response proposeVenueEdit(String vid, String name, String address, String crossstreet, String city, String state, String zip, String phone, String geolat, String geolong) throws FoursquareException;

	Response flagVenueAsClosed(String vid) throws FoursquareException;

	TipsResult tips(String geolat, String geolong, String l) throws FoursquareException;

	Tip addTip(String vid, String text, String geolat, String geolong) throws FoursquareException;

	Tip addTodo(String vid, String text, String geolat, String geolong) throws FoursquareException;

	Tip markTipAsTodo(String tid) throws FoursquareException;

	Tip markTipAsDone(String tid) throws FoursquareException;

	Tip unmarkTip(String tid) throws FoursquareException;

	Requests pendingFriendRequests() throws FoursquareException;

	User approveFriendRequest(String uid) throws FoursquareException;

	User denyFriendRequest(String uid) throws FoursquareException;

	User sendFriendRequest(String uid) throws FoursquareException;

	Users findFriendsByName(String q) throws FoursquareException;

	Users findFriendsByPhone(String q) throws FoursquareException;

	Users findFriendsByTwitter(String q) throws FoursquareException;

	Settings setPings(String uid, String pings) throws FoursquareException;
}